package com.exam.mapper;

import com.exam.domain.Question;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * Created by jly on 2017/2/13.
 */
public interface QuestionMapper {
    /**
     * 查看试题列表具体数据
     *
     * @return: 返回试题列表及相关信息
     * @since: 2017-2-13
     * @author: jly
     * */
    List<Question> questionLists(@Param("creator") String creator,
                                 @Param("typeId") int typeId,
                                 @Param("kindId") int kindId,
                                 @Param("pointId") int pointId);

    /**
     *删除试题
     *
     * @param questionid:试题id
     * @return 返回是否删除成功
     * @since 2017-2-24
     * @author jly
     * */
    boolean delQuestion(@Param("questionid") int questionid);

    /**
     *删除试题相关答案
     *
     * @param questionid:试题id
     * @return 返回是否删除成功
     * @since 2017-2-24
     * @author jly
     * */
    boolean delAnswer(@Param("questionid") int questionid);

    /**
     * 加载编辑框信息
     *
     * @param questionid:试题id
     * @return id对应的试题信息
     * @since 2017-2-24
     * @author jly
     * */
    Question loadEdit(@Param("questionid") int questionid);

    /**
     * 编辑试题信息
     *
     * @param fielsId:专业id，pointId:知识点id，answer:正确答案
     * @return: 修改试题信息
     * @since: 2017-2-24
     * @author: jly
     * */
    boolean questionInfo(@Param("fielsId") int fielsId,
                         @Param("pointId") int pointId,
                         @Param("answer") String answer,
                         @Param("questionId") int questionId);

    /**
     * 查看试题详细信息
     *
     * @param questionId 试题id
     * @return: 返回试题详细信息
     * @since: 2017-2-24
     * @author: jly
     * */
    Question questionDetail(@Param("questionId") Integer questionId);

    /**
     * 查看试题列表具体数据(老师登录)
     *
     * @return: 返回试题列表及相关信息
     * @since: 2017-2-13
     * @author: jly
     * */
    List<Question> questionList_teachet(@Param("creator") String creator,
                                        @Param("typeId") int typeId,
                                        @Param("kindId") int kindId,
                                        @Param("pointId") int pointId,
                                        @Param("userId") Long userId);

    /**
     * 添加新知识点
     *
     * @param pointname:知识点名称， pointdesc:知识点描述
     * @since 2017-3-3
     * @author jly
     * */
    boolean addPoint(@Param("pointname") String pointname, @Param("pointdesc") String pointdesc);

    /**
     * 根据知识点名称查询指点的id
     *
     * @param pointname:知识点名称
     * @since 2017-3-3
     * @author jly
     * */
    int queryPointId(@Param("pointname") String pointname);

    /**
     * 新增试题
     *
     * @param questionName:试题名称， questionDesc：试题描述, kindId:科目, q_type：试题类型
     *         pointId：知识点选择,pointname：知识点新增名称,pointdesc：知识点新增描述
     *         answerA：答案A内容,answerB：答案B内容,answerC：答案C内容,answerD：答案D内容
     *         trueanswer:答案T内容,falseanswer:答案F内容,select1:选择题正确答案,select2:判断题正确答案
     * @since 2017-3-3
     * @author jly
     * */
    boolean addQuestion(@Param("questionName") String questionName,
                        @Param("userId") Long userId,
                        @Param("q_type") Integer q_type,
                        @Param("select1") String select1,
                        @Param("kindId") Integer kindId,
                        @Param("newpointId") int newpointId,
                        @Param("questionDesc") String questionDesc,
                        @Param("level") String level);

    /**
     * 添加试题答案（选择题）
     *
     * @param
     * @param newquestionId
     * @since 2017-3-3
     * @author jly
     * */
    boolean addAnswer1(@Param("answer")String answer,@Param("newquestionId") int newquestionId);

    /**
     * 添加试题答案（判断题）
     *
     * @param
     * @param newquestionId
     * @since 2017-3-3
     * @author jly
     * */
    boolean addAnswer2(@Param("answer")String answer,@Param("newquestionId") int newquestionId);

    /**
     * 根据试题点名称查询试题的id
     *
     * @param questionName:试题名称
     * @since 2017-3-3
     * @author jly
     * */
    int queryQuestionId(@Param("questionName") String questionName);

    /**
     * 根据试题id得到试题正确答案
     *
     * @return: 试题正确答案
     * @since: 2017-3-7
     * @author: jly
     * @param questionid*/
    String queryAnswer(@Param("questionid") Integer questionid);

    /**
     * 向成绩表插入学生成绩
     *
     * @return true-成功,false-失败
     * @since 2017-3-7
     * @author jly
     * @param userid 当前用户id, field 选择科目id, rank 等级判定, grade 分数
     * @param nowtime
     * @param strattime  */
    boolean addGrade(@Param("userid") Long userid,
                     @Param("field") Integer field,
                     @Param("rank") int rank,
                     @Param("grade") int grade,
                     @Param("nowtime") String nowtime,
                     @Param("strattime") String strattime);


    /**
     * 添加科目
     *
     *@param kindname 科目名称,
     * @param kinddesc 科目描述
     * @since 2017-3-14
     * @author jly
     * */
    boolean addKind(@Param("kindname") String kindname, @Param("kinddesc") String kinddesc);

    /**
     * 添加试题类型
     *
     *@param typename 类型名称
     * @since 2017-3-14
     * @author jly
     * */
    boolean addType(@Param("typename") String typename);

    /**
     * 根据科目名称查询科目的id
     *
     * @param kindname:科目
     * @since 2017-3-14
     * @author jly
     * */
    int queryKindId(@Param("kindname") String kindname);

    /**
     * 根据类型名称查询类型的id
     *
     * @param typename:类型名称
     * @since 2017-3-14
     * @author jly
     * */
    int queryTypeId(@Param("typename") String typename);

    /**
     * @descrobe 查询每种类型题目的数量
     *
     * @param fieldid 试题科目  typeId 试题类型id
     * @since 2017-3-17
     * @author jly
     * */
    Integer queryQCount(@Param("fieldid") Integer fieldid, @Param("typeId") int typeId,@Param("level") int level);


    /**
     * 随机试题组卷
     *
     * @return: 试题列表
     * @since: 2017-3-6
     * @author: jly
     * */
    List<Question> studentExam(@Param("fieldid") Integer fieldid,@Param("count") int count,@Param("level") String level);

    /**
     * 随机试题组卷
     *
     * @return: 试题列表
     * @since: 2017-3-6
     * @author: jly
     * */
    List<Question> studentExam2(@Param("fieldid") Integer fieldid,@Param("count") int count,@Param("level") String level);

    /**
     * 随机试题组卷(填空题)
     *
     * @return: 试题列表
     * @since: 2017-3-17
     * @author: jly
     * */
    List<Question> studentExam3(@Param("fieldid") Integer fieldid,@Param("count") int count,@Param("level") String level);

    /**
     * 随机试题组卷(主观题)
     *
     * @return: 试题列表
     * @since: 2017-3-17
     * @author: jly
     * */
    List<Question> studentExam4(@Param("fieldid") Integer fieldid,@Param("typeId") int typeId,@Param("count") int count,@Param("level") String level);

    /**
     * @describe 根据科目id删除该科目的组卷策略
     * @since 2017-3-17
     * @author jly
     * @param fieldxz 科目类别id
     * */
    boolean delstrategies(@Param("fieldxz") int fieldxz);

    /**
     * 查询成绩表最大id
     *
     * @since 2017-3-20
     * @author jly
     * */
    int queryMaxgradeId();

    /**
     * 向老师的判分表插入数据
     *
     * @since 2017-3-20
     * @author jly
     * */
    boolean addteachergrade(@Param("questionid") Integer questionid,
                            @Param("maxgradeId") int maxgradeId,
                            @Param("grade") int grade,
                            @Param("nowtime") String nowtime,
                            @Param("answer") String answer);

    /**
     * @describe 根据实体名称查询试题是否存在
     * @since 2017-3-17
     * @author jly
     * @param questionName*/
    int queryQuestionCount(@Param("questionName") String questionName);
}
